module fifo_rd(
//system clock
input rd_clk , //时钟信号
input rst_n , //复位信号
//FIFO interface
input rd_rst_busy , //读复位忙信号
input [7:0] fifo_rd_data, //从 FIFO 读出的数据
input full , //FIFO 满信号
input almost_empty, //FIFO 将空信号
output reg fifo_rd_en //FIFO 读使能
);

//reg define
reg full_d0;
reg full_d1;

//*****************************************************
//** main code
//*****************************************************

//因为 full 信号是属于 FIFO 写时钟域的
//所以对 full 打两拍同步到读时钟域下
always @(posedge rd_clk or negedge rst_n) begin
if(!rst_n) begin
full_d0 <= 1'b0;
full_d1 <= 1'b0;
end
else begin
full_d0 <= full;
full_d1 <= full_d0;
end
end

//对 fifo_rd_en 进行赋值,FIFO 写满之后开始读，读空之后停止读
always @(posedge rd_clk or negedge rst_n) begin
    if(!rst_n)
        fifo_rd_en <= 1'b0;
    else if(!rd_rst_busy) begin
        if(full_d1)
            fifo_rd_en <= 1'b1;
        else if(almost_empty)
            fifo_rd_en <= 1'b0;
        end
    else
        fifo_rd_en <= 1'b0;
end

endmodule